草庐IT

Swift Struct 的引用计数

全部标签

c# - 通过引用与值传递对象

在深入研究我的类设计之前,我只是想检查一下我对C#处理事物的方式的理解。我目前的理解是:Struct是一种值类型,意味着它实际上包含定义在其中的数据成员。Class是一种引用类型,这意味着它包含对其中定义的数据成员的引用。方法签名通过值传递参数,这意味着值的副本被传递到方法内部,这对于大型数组和数据结构来说是昂贵的。使用ref或out关键字定义参数的方法签名将改为通过reference传递参数,这意味着指向而是提供对象。我不明白的是当我调用一个方法时会发生什么,实际发生了什么。new()是否被调用?它只是自动复制数据吗?或者它实际上只是指向原始对象?使用ref和out对此有何影响?

c# - 对象初始值设定项中的属性可以相互引用吗?

在创建动态对象匿名类型对象(即在对象初始值设定项内部)期间,属性是否可能以某种方式相互引用?我下面的简化示例需要重用Age属性,而无需再次调用GetAgeFromSomewhere()。当然不行。关于如何实现这一点有什么建议吗?varprofile=new{Age=GetAgeFromSomewhere(id),IsLegal=(Age>18)};对于动态对象匿名类型的对象初始值设定项,这样的事情是可能的还是不可能的? 最佳答案 不幸的是,这是不可能的,即使是明确类型化的对象。这是因为对象初始化器的工作方式。例如:publiccla

c# - 我的 C# 项目中的循环引用

我有以下情况:一个项目MyCompany.MyProject.Domain,其中包含我的域模型和部分类(例如Contact)。我想“扩展”(通过分部类,而不是扩展方法)我的Contact类有一个属性Slug,它将给我一个简单的URL友好名字和姓氏的文本表示。我的Utility项目MyCompany.MyProject.Utilities中有一个字符串扩展方法ToSlug(),它完全符合我的要求想要2).问题:我的Utility项目已经在引用我的Domain项目,这意味着我无法获取Domain项目查看Utility项目的ToSlug()方法,而不会导致循环引用。我并不热衷于创建另一个项目

c# - 为什么我(有时)必须引用我引用的程序集所引用的程序集?

我有一个程序集A,它定义了一个带有一些重载的接口(interface):publicinterfaceITransform{PointInverseTransform(Pointpoint);RectInverseTransform(Rectvalue);System.Drawing.PointInverseTransform(System.Drawing.Pointpoint);}...以及引用A(二进制文件,而非项目)并调用其中一个重载的程序集B:vartransform=(other.Source.TransformToDisplay!=null&&other.Source.Tr

c# - 在引用类型上重写 Equals 是否应该始终意味着值相等?

在不对引用类型做任何特殊处理的情况下,Equals()将意味着引用相等(即相同的对象)。如果我选择覆盖Equals()对于引用类型,它是否总是意味着两个对象的值是等价的?考虑这个可变的Person类:classPerson{readonlyintId;stringFirstName{get;set;}stringLastName{get;set;}stringAddress{get;set;}//...}代表同一个人的两个对象将始终具有相同的Id,但其他字段可能会随着时间的推移而有所不同(即在地址更改之前/之后)。对于这个对象,Equals可以定义为不同的意思:值相等:所有字段都相等(

c# - 是否可以创建接受(可空)值类型和引用类型的 C# 泛型方法?

我想创建一个接受值类型和引用类型参数的简单方法,即int是值,string是引用。所以这就是我的开始:publicboolAreBothNotNull(T?p1,T?p2){return(p1.HasValue&&p2.HasValue);}所以我希望能够像这样使用它:varr1=AreBothNotNull(3,4);//willbetruevarr2=AreBothNotNull(3,null);//willbefalsevarr3=AreBothNotNull("three","four");//willbetruevarr4=AreBothNotNull(null,"four"

c# - 获取一个字符串以在 C# 中引用另一个字符串

我有C++背景。以前有人问过这个问题,但我可能无法找到答案。假设我有:string[]ArrayOfReallyVeryLongStringNames=newstring[500];ArrayOfReallyVeryLongStringNames[439]="Helloworld!";我可以创建一个引用上述内容的字符串吗(这些都不会编译):stringa=refArrayOfReallyVeryLongStringNames[439];//nocompilestringa=&ArrayOfReallyVeryLongStringNames[439];//nocompile我明白字符串在

c# - 如何禁用 Newtonsoft JSON 序列化程序中的对象引用创建?

我将我的ASP.NETMVC应用程序切换为使用NewtonsoftJsonSerializer来执行我们的JSON序列化,如下所示:varwriter=newJsonTextWriter(HttpContext.Response.Output){Formatting=Formatting};varserializer=JsonSerializer.Create();serializer.Serialize(writer,myData);这会生成一些具有$id和$ref属性的JSON,然后从JSON中删除重复的对象。我知道这是一个很棒的功能,但读取此JSON的客户端不支持解释这些引用并期

c# - “比较”是 'System.ComponentModel.DataAnnotations.CompareAttribute' 和 'System.Web.Mvc.CompareAttribute' 之间的模糊引用

我的AccountController中有这个错误。Thetypeornamespacename'SelectListItem'couldnotbefound(areyoumissingausingdirectiveoranassemblyreference?明显的解决方法是添加usingSystem.Web.Mvc;但是当我这样做时我得到4个新错误在两条不同的线上:Thetypeornamespacename'ErrorMessage'couldnotbefound(areyoumissingausingdirectiveoranassemblyreference?)另外两条不同的线

C# XML Comments : How many <see . ../> XML 注释中的引用有用吗?

在我们公司,我们写了过多的Xml注释。典型的方法必须像这样记录://////Determineswhetherthiscontainsaspecific.//////Thetolocateinthis.//////Returnsifisfoundinthis;otherwise,.///boolContains(IScheduleschedule);//////Removesandsthefirstoccurrenceofaspecific///fromthis.//////Thetoremovefromthis.///Isthrownwhentheparameterschedulei